package beans;

import daos.CampeonatoDAO;
import daos.PartidaDAO;
import entitys.Campeonato;
import entitys.Partida;
import entitys.Time;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpSession;

/**
 *
 * @author Amauri
 */
@ManagedBean
@SessionScoped
public class PartidaBean {
    
    private CampeonatoDAO campeonato_dao;
    private PartidaDAO partida_dao;
    private Campeonato campeonato;
    private Long codigoCampeonato;
    private boolean isAdmin;
    
    public PartidaBean(){
        this.setCampeonato_dao(new CampeonatoDAO());
        this.setPartida_dao(new PartidaDAO());
    }
    
    public String iniciarCampeonato(Campeonato campeonato){
        
        campeonato = this.getCampeonato_dao().findById(campeonato.getID());
        
        this.setCodigoCampeonato(campeonato.getID());
        
        HttpSession session = (HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(false);  
        
        this.setIsAdmin((boolean)session.getAttribute("isAdmin"));
                
        if (this.getPartida_dao().listAll(campeonato.getID()).size() > 0){
            return "partidas_listar";
        }
        
        Random r = new Random();
        boolean sair = false;
        Time time1, time2;
        int countLados = 1;
        Partida partida;
        
        List<Time> timesCampeonato = campeonato.getTimes();

        r.nextInt();
        
        while (!sair) {
            time1 = timesCampeonato.remove(r.nextInt(timesCampeonato.size()));
            time2 = timesCampeonato.remove(r.nextInt(timesCampeonato.size()));
            
            partida = new Partida();
            partida.setTime1(time1);
            partida.setTime2(time2);
            partida.setCampeonato(campeonato);
            partida.setFase("quartas");
            partida.setLado((countLados > 2 ? "dir" : "esq"));
            
            this.getPartida_dao().Salvar(partida);
            
            countLados++;
            
            if (countLados > 4){
                sair = true;
            }
        }
        
        return "partidas_listar";
    }

    public List<Partida> getPartidas(String lado, String fase, Long codigoCamp){
    
        List<Partida> partidas = this.getPartida_dao().listAll(codigoCamp);
        List<Partida> retorno = new ArrayList<Partida>();
        
        for(Partida p: partidas){
            if (p.getFase().equals(fase) && p.getLado().equals(lado)){
                retorno.add(p);
            }
        }
        
        return retorno;
    }
    
    public CampeonatoDAO getCampeonato_dao() {
        return campeonato_dao;
    }

    public void setCampeonato_dao(CampeonatoDAO campeonato_dao) {
        this.campeonato_dao = campeonato_dao;
    }

    public PartidaDAO getPartida_dao() {
        return partida_dao;
    }

    public void setPartida_dao(PartidaDAO partida_dao) {
        this.partida_dao = partida_dao;
    }

    public Campeonato getCampeonato() {
        return campeonato;
    }

    public void setCampeonato(Campeonato campeonato) {
        this.campeonato = campeonato;
    }

    public Long getCodigoCampeonato() {
        return codigoCampeonato;
    }

    public void setCodigoCampeonato(Long codigoCampeonato) {
        this.codigoCampeonato = codigoCampeonato;
    }

    public boolean isIsAdmin() {
        return isAdmin;
    }

    public void setIsAdmin(boolean isAdmin) {
        this.isAdmin = isAdmin;
    }
    
}
